# 운영체제의 역할과 구조
# 운영체제란?
운영체제 (OS, Operating System)
하드웨어를 관리하고, 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 응용 프로그램과 하드웨어 간의 인터페이스로써 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공합니다.
운영 체제는 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어라고 할 수 있습니다.
# 운영체제의 목적
- 처리능력(Throughput) : 일정 시간 내에 시스템이 처리하는 일의 양
- 반환시간(Turn Around Time) : 시스템에 작업을 의뢰한 시간부터 처리가 완료될 떄까지 걸린 시간
- 사용가능도(Availability) : 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
- 신뢰도(Reliabilty) : 시스템이 주어진 문제를 정확하게 해결하는 정도
# 운영체제의 역할
- CPU 스케줄링과 프로세스 관리
- 스케줄링 : CPU의 소유권을 어떤 프로세스에 할당할지 관리합니다.
- 프로세스와 쓰레드의 생성과 삭제를 관리합니다.
- 자원 할당 및 반환을 관리합니다.
- 메모리 관리
- 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리합니다.
- 디스크 파일 관리
- 디스크 파일을 어떤 방법으로 보관할지 관리합니다.
- I/O 디바이스 관리
- I/O 장치(마우스, 키보드)와 컴퓨터 간에 데이터를 주고 받는 것을 관리합니다.
# 운영체제의 기능
- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리합니다.
- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공합니다.
- 사용자와 시스템간의 편리한 인터페이스를 제공합니다.
- 시스템의 각종 하드웨어와 네트워크를 관리, 제어합니다.
- 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공합니다.
- 시스템의 오류를 검사하고 복구합니다.
- 자원 보호 기능을 제공합니다.
- 입 출력에 대한 보조 기능을 제공합니다.
- 가상 계산기 능력을 제공합니다.
# 운영체제의 구조
- 유저 프로그램이 맨 위에 있고 그 다음으로 GUI, 시스템콜, 커널, 드라이버가 있으며, 가장 밑에 하드웨어가 있는 구조입니다.
- GUI, 시스템콜, 커널, 드라이버 부분이 운영체제입니다.
용어
GUI
사용자가 전자장치와 상호작용할 수 있도록 하는 사용자 인터페이스의 한 형태, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호작용할 수 있도록 합니다.
드라이버
커널과 하드웨어의 인터페이스를 담당합니다. 커널이 제공하는 드라이버도 있고, 하드웨어 제작자가 제공하는 드라이버도 있으며, 연결 및 제동이 드라이버를 통해 이루어집니다.
# CPU 모드
CPU는 사용자 애플리케이션(User Application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공합니다.
# 사용자 모드(User Mode)
- 사용자 모드에서 사용자 애플리케이션 코드가 실행됩니다.
- 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 직접적으로 접근할 수 없습니다.
- 접근을 위해서는 시스템 콜(System Call)을 사용해야 한다. 사용자 애플리케이션의 각 스레드들은 고유의 사용자 모드 스택을 가집니다.
# 커널 모드(Kernel Mode)
- 운영체제(OS)가 CPU를 사용하는 모드입니다.
- 시스템콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행합니다.
- Privileged Instructions은 사용자 모드에서 실행되면 exception이 발생한다.
# modebit
- 시스템콜이 동작할 때
modebit
을 참고해서 유저모드와 커널모드를 구분합니다. modebit
은 1 또는 0의 값을 가지는 플래그 변수입니다.- 커널 모드를 거쳐 운영체제를 통해 동작한다고 해도, 100%로의 악의적 사용을 막을 수 없지만, 운영체제를 통해 작동하게 해야 막기가 수월합니다.
- 0은 커널 모드, 1은 유저 모드입니다.
# 시스템 콜
시스템 콜(System Call)
시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며, 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용합니다.
- 유저 프로그램이 I/O 요청으로
트랩(trap)
을 발생시키면 올바른 I/O 요청인지 확인한 후유저 모드
가 시스템콜을 통해커널 모드
로 변환되어 실행됩니다. - 이때 유저 모드에서 파일을 읽지 않고
커널 모드
로 들어가 파일을 읽고 다시유저 모드
로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행합니다.
이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호 할 수 있습니다.
용어
I/O 요청
입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
드라이버
하드웨어를 제어하기 위한 소프트웨어
동작 흐름
메모리(프로세스, 스레드) -> 시스템콜 -> 커널 -> OS
- 프로세스나 스레드에서 운영체제로 요청을 할 때 시스템 콜과 커널을 거쳐 전달됩니다.
- 시스템콜은 하나의 추상화 계층이며, 네트워크 통신이나, 데이터베이스와 같은 낮은 단계의 영역처리에 대한 부분을 신경쓰지 않고, 프로그램을 만들 수 있다는 장접이 있습니다.
# 시스템 콜의 종류
- 프로세스 제어(Process Control)
- 프로세스 생성/제거
- 끝내기, 중지
- 적재, 실행
- 대기
- 메모리 할당/해제
- 파일 조작(File Manipulation)
- 파일 생성/삭제
- 열기/닫기/읽기/쓰기
- 디바이스 조작(Device Manipulation)
- 장치 요청/해제
- 장치 읽기/쓰기/위치 변경
- 속성 설정
- 디바이스 조작(Device Manipulation)
- 장치 요청/해제
- 장치 읽기/쓰기/위치 변경
- 속성 설정
- 정보 유지(Information Maintenance)
- 시간, 날짜 설정/요청
- 보호(Protection)
- 권한 관리
# 시스템 콜 실행 과정
- 라이브러리 함수(printf)를 호출한다.
- 라이브러리 함수 내부에서 시스템 콜(write)를 호출한다.
- 해당 시스템 콜의 인덱스(4)를 CPU 레지스터에 저장한다.
- 0x80 인터럽트를 발생시킨다.(커널 모드로 전환)
- IDT(Interrupt Descriptor Table)를 참조하여 system_call()을 호출한다.
- 이때 3에서 저장한 인덱스를 system_call() 함수 내에 전달한다.
- sys_call_table을 참조해 해당 인덱스에 맞는 기능(sys_write)을 호출한다.
- 수행이 모두 끝나면 사용자 모드로 전환된다.
# 커널 (Kernel)
정의
운영체제의 핵심 부분이자 시스템 콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 수행합니다.
- 운영체제는 규모가 매우 큰 프로그램이므로, 운영체제의 모든 부분을 메모리에 올려놓는 것은 메모리의 측면으로 봤을 때 굉장히 비효율적입니다.
- 운영체제는 필요한 부분만을 메모리에 올려서 사용하게 되는데, 이 때 메모리에 상주하는 운영체제의 핵심 부분을 커널이라고 합니다.
- 커널은 메모리에 상주하는 부분이므로, 운영체제의 핵심 부분이라고 볼 수 있기 때문에, 주로
'운영체제 = 커널'
이라고 말합니다.
# 쉘 (Shell)
정의
운영체제가 사용자를 위해 제공하는 인터페이스
- 사용자가 운영체제의 기능을 조작할 수 있도록 인터페이스를 제공하는 일종의 응용 프로그램입니다.
- CLI 환경과 GUI 환경 두 종류로 분류됩니다.